# -*- coding:utf-8 -*-
# Created by Zhangyichao on 2018/12/03


import pymssql as mdb
import sys

def MssqlTest1():
    con = None
    try:
        #连接mysql的方法：connect('ip','user','password','dbname')
        con = mdb.connect('192.168.2.113', 'sa', '12345abcdeABCDE', 'OMOP_CDM');
        #所有的查询，都在连接con的一个模块cursor上面运行的
        cur = con.cursor()
        #执行一个查询
        cur.execute("SELECT @@VERSION;")
        #取得上个查询的结果，是单个结果
        data = cur.fetchone()
        print("Database version : %s " % data)
    finally:
        if con:
            # 无论如何，连接记得关闭
            con.close()

def MssqlTest2():
    # 将con设定为全局连接
    con = mdb.connect('192.168.2.113', 'sa', '12345abcdeABCDE', 'OMOP_CDM');
    with con:
        # 获取连接的cursor，只有获取了cursor，我们才能进行各种操作
        cur = con.cursor()
        # 创建一个数据表 writers(id,name)
        cur.execute("""      
IF OBJECT_ID('Writers', 'U') IS NOT NULL
    DROP TABLE Writers
CREATE TABLE Writers (
    id INT IDENTITY(1,1),
    Name VARCHAR(100),   
    PRIMARY KEY(id)
)
    """)
        # 以下插入了5条数据
        cur.execute("INSERT INTO Writers(Name) VALUES('Jack London')")
        cur.execute("INSERT INTO Writers(Name) VALUES('Honore de Balzac')")
        cur.execute("INSERT INTO Writers(Name) VALUES('Lion Feuchtwanger')")
        cur.execute("INSERT INTO Writers(Name) VALUES('Emile Zola')")
        cur.execute("INSERT INTO Writers(Name) VALUES('Truman Capote')")
        con.commit()

def MssqlTest3():
    con = mdb.connect('192.168.2.113', 'sa', '12345abcdeABCDE', 'OMOP_CDM');
    with con:
        # 仍然是，第一步要获取连接的cursor对象，用于执行查询
        cur = con.cursor()
        # 类似于其他语言的query函数，execute是python中的执行查询函数
        cur.execute("SELECT * FROM Writers")
        # 使用fetchall函数，将结果集（多维元组）存入rows里面
        rows = cur.fetchall()
        # 依次遍历结果集，发现每个元素，就是表中的一条记录，用一个元组来显示
        for row in rows:
            print(row)

# 游标返回行为字典变量
def MssqlTest4():
    # 获得mysql查询的链接对象
    con = mdb.connect('192.168.2.113', 'sa', '12345abcdeABCDE', 'OMOP_CDM');
    # 加上cursorclass=DictCursor参数下面的cur = con.cursor()就不用加参数了，两种方法都可行。
    # con = mdb.connect('localhost', 'root', 'root', 'test', cursorclass=DictCursor)
    with con:
        # 获取连接上的字典cursor，注意获取的方法，
        # 每一个cursor其实都是cursor的子类
        #cur = con.cursor(mdb.cursors.DictCursor) mysql 版本
        cur=con.cursor(as_dict=True)
        # 执行语句不变
        cur.execute("SELECT * FROM Writers")
        # 获取数据方法不变
        rows = cur.fetchall()
        # 遍历数据也不变（比上一个更直接一点）
        for row in rows:
            # 这里，可以使用键值对的方法，由键名字来获取数据
            print("%s %s" % (row["id"], row["Name"]))


if __name__=='__main__':
    #MssqlTest1()
    MssqlTest2()
    #MssqlTest3()
    MssqlTest4()